# 分发糖果
# 2025/02/24
# 理解题意是关键
# 答前须知：
# 字典序即字母在字典中出现的顺序，故【b开头的字符串】>【a开头的字符串】,即字典序：b > azzzzbabjdsjajdbjqsada
'''
##
答前须知：
字典序即字母在字典中出现的顺序，故【b开头的字符串】>【a开头的字符串】,即字典序：b > azzzzbabjdsjajdbjqsada

问题重述：
一共有n个字母（糖果）、x同学，每个同学获得至少一个字母
同学的开心程度为获得字母的字典序之和。

最佳方案是尽可能使得 同学们的开心程度相差不大,而且一定分完所有糖果
输出能实现这个目的的最大开心程度

输出字典序最大 但是字符串最小的字符串

关键点：确定某段糖果的“起始字母” ; “起始字母”相同的情况注意“终止字母”(第三种情况（样例情况）)
'''

n, x = map(int, input().split())
S = input()
S = sorted(S)  # 将糖果S按从小价值的到大价值的排序（方便确定起始字母）

# 第一种情况，第一轮分配后已经决出【唯一的】不同“起始字母”，故那个不同的字母就是最大的(字典序" b "始终大于" azzzzzzzzzz ")
if S[x - 1] != S[0]:  # 分配给最后一个小朋友的糖果价值 > 第一个小朋友的糖果价值（由于已排序，故不等于就是大于）
    print(S[x - 1])
    # 其实你写到这里已经可以通过90%的数据了

else:  # 第二种情况，第一批分配后每个人拿到等价值的糖果，即每个“起始字母”都相同，且除去起始字母外，后面的字母都相同

    if S[x] == S[-1]:  # 保证后面剩余糖果都一样
        print(S[x - 1], end='')  # 输出“起始字母”
        for i in range(x, n, x):  # 接着模拟输出第一个小朋友累积分配到的糖果（步长为小朋友的个数）
            print(S[i], end='')

    # 第三种情况，“起始字母”相同，但是后面拿到的糖果不相同（样例的情况）
    else:
        for i in S[x - 1:]:  # 假如俩同学，字符串为aabccd,则为 a；abccd
            print(i, end='')
'''

{第一种情况举例}
aaabcdsacaca 分给4个小朋友：
第一轮==> a; a; a; b
第二轮==> 后面的模拟没必要。因为为了符合题意后面的糖果一定是给前三个小朋友的，但是无论怎么给都没意义（字典序" b "始终大于" azzzzzzzzzz ")
故输出'b'即可（第x个小朋友所得的糖果）

{第二种情况举例}
aaabbbbbb 分给 3个小朋友：
第一轮==> a; a; a
第二轮==> ab; ab; ab 后面的b均匀分配，使其长度都差不多
第三论==> ...
所以第一个小朋友由于优先分配，始终保持最多，输出第一个小朋友的糖果就行啦~

{第三种情况举例}
aaabbbc 分给三个小朋友：
第一轮==> a; a; a
第二轮==> ab; ab; ab
第三轮==> abc; ab; ab

第三种情况的模拟分配是我第一次写这题时的想法，也是很典型的错误想法，也是看不懂样例分配的原因

如果按照这样分配了，则认为 'abc' 与 'ab' 的字典序差距是最小了，那么真的是最小了吗？

那有没有能使得 'abc' 更小而 'ab' 更大 的分配方法呢？

答案是有的，那就是使 'abc' 中的 “终止字母”的'c'在更后面
故而把所有的能让'c'往后排的字母都来削弱'c'的力量：
最后就得到了 abbbc; a; a 的分配方式
这也是样例的分配方式。
也就是尽可能使大的终止字符往后排，可使得大价值糖果价值变小~

但是！其实还是有点疑惑的，即这种分配方式是认为了命题如下：
“abc与ab的差距 > abbc与a的差距”
而这个命题还是不懂的，所以还需要大佬来解答，但他样例都这样给了，也只能默认这是真命题了
我依然保持疑问。
'''
